package br.com.insight.consultoria.apresentacao.curriculo;

import java.util.HashMap;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import javax.servlet.http.HttpSession;

import br.com.insight.consultoria.apresentacao.messagebean.InsightMB;
import br.com.insight.consultoria.apresentacao.validador.ValidadorCPF;
import br.com.insight.consultoria.entity.NivelAcesso;
import br.com.insight.consultoria.entity.PerguntaSecreta;
import br.com.insight.consultoria.entity.Usuario;
import br.com.insight.consultoria.erro.exception.InsightException;
import br.com.insight.consultoria.negocio.fachada.perguntasecreta.FachadaPerguntaSecreta;
import br.com.insight.consultoria.negocio.fachada.usuario.FachadaUsuario;

public class CurriculoAutenticacaoMB extends InsightMB{
	
	private Usuario usuario;
	
	private FachadaUsuario fachadaUsuario;
	
	private FachadaPerguntaSecreta fachadaPerguntaSecreta;
	
	private String idUsuario;
	
	private String idPergunta;
	
	private UIInput confirmaSenha;
	
	private String confSenha;


	public String inserir(){
	try{
		getFachadaUsuario().inserir(usuario);
		inLogin();
	}catch(InsightException exception){		
		return FAILURE;
	}
		return SUCESSO;
	}
	
	private void inLogin() throws InsightException{
		
		FacesContext context = FacesContext.getCurrentInstance();
		HttpSession session = (HttpSession) context.getExternalContext().getSession(true);
		
		session.setAttribute("loginSession", getFachadaUsuario().getUsuario(getUsuario().getId()));
	}
	
	public void validatorUsuario(FacesContext context, UIComponent component, Object value) throws ValidatorException, InsightException {
			
			String cpf=value.toString();
			cpf=cpf.replace(".", "");
			cpf=cpf.replace("-", "");
			
			if(!(ValidadorCPF.validaCPF(cpf))){
				FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
						getMessageBundle("br.com.insight.curriculo.usuario.cpf.valido"), getMessageBundle("br.com.insight.curriculo.usuario.cpf.valido_detail"));
				throw new ValidatorException(message);
			}
			
			if(getFachadaUsuario().validateUsuario(new Long(cpf))){
				FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
						getMessageBundle("br.com.insight.curriculo.usuario.existente"), getMessageBundle("br.com.insight.curriculo.usuario.existente_detail"));
				throw new ValidatorException(message);
			}
			
		}
	
	public void validatorSenha(FacesContext context, UIComponent component, Object value) throws ValidatorException, InsightException {
		
		String confiSenha=((String)confirmaSenha.getLocalValue()).toString();
		String senha=(String)value.toString();
		
		
		if(!(senha.equals(confiSenha))){
			
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					getMessageBundle("br.com.insight.curriculo.usuario.senha"), getMessageBundle("br.com.insight.curriculo.usuario.senha_detail"));
			throw new ValidatorException(message);
			
		}		
		
	}
	
	public UIInput getConfirmaSenha() {
		return confirmaSenha;
	}

	public void setConfirmaSenha(UIInput confirmaSenha) {
		this.confirmaSenha = confirmaSenha;
	}
	
	public String getConfSenha() {
		return confSenha;
	}

	public void setConfSenha(String confSenha) {
		this.confSenha = confSenha;
	}

	public Usuario getUsuario() {
		if(usuario==null){
			usuario=new Usuario();
		}
		return usuario;
	}

	public String getIdUsuario() {
		return idUsuario;
	}

	public void setIdUsuario(String idUsuario) {
		
		String cpf=idUsuario.toString();
		
		cpf=cpf.replace(".", "");
		cpf=cpf.replace("-", "");
		
		getUsuario().setId(new Long(cpf));
		NivelAcesso acesso=new NivelAcesso();
		
		acesso.setId(new Long("3"));
		
		getUsuario().setAcesso(acesso);
		
		this.idUsuario = idUsuario;
	}

	public String getIdPergunta() {
		return idPergunta;
	}

	public void setIdPergunta(String idPergunta) {
		PerguntaSecreta secreta=new PerguntaSecreta();
		secreta.setId(new Long(idPergunta));
		getUsuario().setPerguntaSecreta(secreta);
		this.idPergunta = idPergunta;
	}

	public FachadaPerguntaSecreta getFachadaPerguntaSecreta() {
		return fachadaPerguntaSecreta;
	}


	public void setFachadaPerguntaSecreta(
			FachadaPerguntaSecreta fachadaPerguntaSecreta) {
		this.fachadaPerguntaSecreta = fachadaPerguntaSecreta;
	}
	
	public FachadaUsuario getFachadaUsuario() {
		return fachadaUsuario;
	}


	public void setFachadaUsuario(FachadaUsuario fachadaUsuario) {
		this.fachadaUsuario = fachadaUsuario;
	}


	public Map<String,Object> getListaPerguntaSecreta() throws InsightException{
		Map<String, Object> pergunta=new HashMap<String, Object>();
		for (PerguntaSecreta psecreta: getFachadaPerguntaSecreta().listaPerguntaSecreta()) {
			pergunta.put(psecreta.getPergunta(), new Long(psecreta.getId()));
		}
		return pergunta;
	}
}
